iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
0
自我挑戰組

學習 canvas 日記系列 第 17

第 17 天 旋轉、放大、縮小

  • 分享至 

  • xImage
  •  

繼續以前一天的五角形為例子
因為 for 迴圈得到的 (x,y)
會從圓中心 (0, 0) 向左找到起點 (半徑, 0)
https://ithelp.ithome.com.tw/upload/images/20181029/20107496yDPLyzSAj6.jpg
依順序順時針找到其他點
https://ithelp.ithome.com.tw/upload/images/20181029/201074969rPJOW99AI.jpg
https://ithelp.ithome.com.tw/upload/images/20181029/20107496DKLRMtXUMf.jpg
全部點連線後產生形狀
https://ithelp.ithome.com.tw/upload/images/20181029/20107496jiDlW7ue3Y.jpg
因為起點是 (半徑, 0) 的關係
遇到五邊形、七邊形、九邊形時看起來就會有些斜斜的
https://ithelp.ithome.com.tw/upload/images/20181029/20107496jbAyLi2RIQ.jpg
要讓多邊形的底能是水平時就必需逆時針轉90度讓起點在上方

ctx.rotate((-90*Math.PI)/180);

https://ithelp.ithome.com.tw/upload/images/20181029/20107496sND5ILf0Gk.jpg
但發現轉-90度後圖形跑到左上角而且只看到一部分
這因為在預設 rotate() 的中心點在畫布的 (0, 0)
所以中心點要移動到圖形中央
也就是半徑 (50, 50)

ctx.translate(50,50);
ctx.rotate((-90*Math.PI)/180);

https://ithelp.ithome.com.tw/upload/images/20181030/20107496Uzl6w5Ej2s.jpg
就可以解決把圖形逆時針轉90度的問題
除了移動位置、旋轉還可以使用 scale 做放大或縮小

ctx.scale(0.5, 0.5);

scale(x, y) 參數設定 x、y軸的放大縮小比例
原尺寸 100% = 1
縮小 50% = 0.5
放大 150% = 1.5
另外也可以用 (-1, 1) 做到水平翻轉
https://ithelp.ithome.com.tw/upload/images/20181030/20107496w65Mb5TMh2.jpg
或是 (1, -1) 垂直翻轉
https://ithelp.ithome.com.tw/upload/images/20181030/20107496CDRUjn5N0G.jpg


上一篇
第 16 天 多邊形
下一篇
第 18 天 setInterval、clearInterval
系列文
學習 canvas 日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言